import java.util.HashMap;
import java.util.Map;

/*
 * @lc app=leetcode.cn id=1189 lang=java
 *
 * [1189] “气球” 的最大数量
 *
 * https://leetcode-cn.com/problems/maximum-number-of-balloons/description/
 *
 * algorithms
 * Easy (61.69%)
 * Likes:    15
 * Dislikes: 0
 * Total Accepted:    5.9K
 * Total Submissions: 9.5K
 * Testcase Example:  '"nlaebolko"'
 *
 * 给你一个字符串 text，你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"（气球）。
 *
 * 字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。
 *
 *
 *
 * 示例 1：
 *
 *
 *
 * 输入：text = "nlaebolko"
 * 输出：1
 *
 *
 * 示例 2：
 *
 *
 *
 * 输入：text = "loonbalxballpoon"
 * 输出：2
 *
 *
 * 示例 3：
 *
 * 输入：text = "leetcode"
 * 输出：0
 *
 *
 *
 *
 * 提示：
 *
 *
 * 1 <= text.length <= 10^4
 * text 全部由小写英文字母组成
 *
 *
 */

// @lc code=start
class Solution {
    public int maxNumberOfBalloons(String text) {
        Map<Character, Integer> map = new HashMap<>();
        for(char c : text.toCharArray()) {
            if(!map.containsKey(c)) {
                map.put(c, 1);
            } else {
                int value = map.get(c);
                map.put(c, ++value);
            }
        }
        int cnt = Integer.MAX_VALUE;
        int b = 0;
        if(!map.containsKey('b'))
            return 0;
        b = map.get('b');
        cnt = Math.min(cnt, b);
        if(!map.containsKey('a'))
            return 0;
        b = map.get('a');
        cnt = Math.min(cnt, b);
        if(!map.containsKey('l'))
            return 0;
        b = map.get('l') >> 1;
        cnt = Math.min(cnt, b);
        if(!map.containsKey('o'))
            return 0;
        b = map.get('o') >> 1;
        cnt = Math.min(cnt, b);
        if(!map.containsKey('n'))
            return 0;
        b = map.get('n');
        cnt = Math.min(cnt, b);
        return cnt;
    }
}
// @lc code=end

